// server 服务器对接
import Middleware from '../middleware/index'

// 请求处理中心
import $http from './requer_center/index'

// 状态码处理
import filterCode from '@/components/service/middleware_fns/res_code'

// 中间件配置
import rConfig from './mdl_config'

// 数据仓库
import {store} from '@/store/index'


// 添加拦截器
$http.interceptors.response.use(filterCode)
  

// 请求方法
function req(psc:commonInf.params):Promise<any> {
        
    const config = rConfig[psc.url];
    
    if(!config){
        throw '请求地址错误'
    }

    // 构建中间件
    const mdlBefore = new Middleware(config.reqBefore);
    const mdlAfter = new Middleware(config.resAfter);


    // 执行流程
    return mdlBefore.action({params: psc.data, store}, async (ctx) =>{

        let resData:any;

        // 防止请求数据为空字符时，将清除ukey, appkey，等默认配置
        ctx.params = ctx.params || {};
        
        // 请求参数/提交数据
        let reqdata = config.method === 'post' ? ctx.params : {params: ctx.params};


        await $http[config.method](config.url, reqdata).then( async(res) =>{
           
            // 错误中断（跳过请求后处理流程）
            if(res.data.statusCode !== 200){

                 // 请求信息错误
                console.error("request Error", res.data.message)
                
                resData =  {
                    reqSuccess: false,
                    resData:{}
                }

                return;
            }

            // 获取数据后, 处理中间件
            await mdlAfter.action({params:res.data.result, store}, (ctx) =>{

                resData = {
                    reqSuccess: true,
                    resData: ctx.params
                };

            })
            
        })

        return resData;
    })
    
}


export { req }